//package org.chs.ts.batch.execute.step;
//
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
//import com.sun.deploy.util.ParameterUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.chs.ts.batch.exception.TaskStepExecException;
//import org.chs.ts.batch.exec.entity.BatchClearBasicTaskStepExec;
//import org.chs.ts.batch.execute.BatchTaskExecute;
//import org.chs.ts.batch.util.CommonUtil;
//import org.springframework.context.annotation.Lazy;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.io.File;
//import java.io.IOException;
//import java.math.BigDecimal;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * @Compay 盛唐天行
// * @Author: wuwei
// * @Censor By wuwei
// * @Sence 2024/4/23 10:04
// * @Modify 2024/4/23 10:04
// * @Description 跑批平台-获取统一支付对账文件
// * 未启用 taskParams 和 taskStepParams 调用
// */
//@Slf4j
//@Service("TaskStepGetAccountingFileBusinessFromPay")
//@Lazy
//public class TaskStepGetAccountingFileBusinessFromPay implements BatchStepServiceBase<BatchTaskExecute, BatchExecResp, TaskStepExecException> {
//    //
//    //@Resource
//    //private ParameterUtil parameterUtil;
//    //
//    //@Resource
//    //private FileSftp fileSftp;
//    //@Resource
//    //private FileGTP fileGTP;
//    //
//    //@Resource
//    //private IMwbpBatchFileService batchFileService;
//    //
//    //@Resource
//    //private IMwbpPayCheckInfoService payCheckInfoService;
//    //
//    //private File payUrldownloadPayFileDir;
//    //private String ip;
//    //private int port;
//    //
//    //private String user;
//    //private String pass;
//    //
//    //@Override
//    //public BatchExecResp execute(BatchTaskExecute BatchServiceBean) {
//    //
//    //    printRunningMsg(BatchServiceBean);
//    //
//    //    BatchExecResp resp = BatchServiceBean.initBatchExecResp();
//    //
//    //    String downFileMethod = parameterUtil.getParameterByCode("mwbpPayDownMethod");
//    //    log.info("获取统一支付对账文件连接标识 mwbpPayDownMethod(0-GTP,1-SFTP) = {}", downFileMethod);
//    //
//    //    if ("".equals(downFileMethod)) {
//    //        resp.setRtnDesc("统一支付文件连接标识未配置[mwbpPayDownMethod](0-GTP,1-SFTP)");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //
//    //    try {
//    //        if (MwbpConstant.ERR_MWBP_GTP.equals(downFileMethod) || MwbpConstant.ERR_MWBP_SFTP.equals(downFileMethod)) {
//    //            BatchExecResp respConnect = checkConnServerAndFileDir(resp, downFileMethod);
//    //            if (respConnect.getRtnCode().equals(RetCode.FAILED)) {
//    //                return respConnect;
//    //            }
//    //        } else {
//    //            resp.setRtnDesc("统一支付对账文件连接标识配置非法 mwbpCoreDownMethod = {" + downFileMethod + "}");
//    //            resp.setRtnCode(RetCode.FAILED);
//    //            return resp;
//    //        }
//    //
//    //        log.info("----------------------[获取统一支付对账文件]--------------------------");
//    //        BatchExecResp recvPayGenCheckFileResp = recvPayGenCheckFile(resp, BatchServiceBean.getTaskStepObject(), downFileMethod);
//    //        if (recvPayGenCheckFileResp.getRtnCode().equals(RetCode.FAILED)) {
//    //            return recvPayGenCheckFileResp;
//    //        }
//    //    } catch (Exception ex) {
//    //        log.info("获取统一支付对账文件失败或保存数据失败：{}", ex.getMessage());
//    //        resp.setRtnDesc("2获取统一支付对账文件失败或保存数据失败" + ex.getMessage());
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //
//    //    return resp;
//    //}
//    //
//    //private BatchExecResp recvPayGenCheckFile(BatchExecResp resp, BatchClearBasicTaskStepExec taskStepObject, String downFileMethod) {
//    //    log.info("---------- recvPayGenCheckFile-获取统一支付对账文件 Begin -----------");
//    //
//    //    // GYSTRL_YYYYMMDD
//    //    String fileName = "GYSTRL_" + taskStepObject.getExecDate();
//    //    String payUrl = parameterUtil.getParameterByCode("mwbpPayUrl") + fileName;
//    //    log.info("获取下载统一支付对账文件路径mwbpPayUrl = {}", payUrl);
//    //
//    //    //校验文件路径
//    //    if (Util.isNullOrEmpty(payUrl)) {
//    //        resp.setRtnDesc("操作失败！统一支付对账文件路径[mwbpPayUrl]为空!");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //
//    //    String localPath = getLocalPathString(taskStepObject);
//    //
//    //    log.info("recvPayGenCheckFile-获取统一支付对账文件-对账路径获取：{}", localPath);
//    //
//    //    File fileLocal = new File(localPath);
//    //    if (!fileLocal.exists()) {
//    //        if (!fileLocal.isDirectory())
//    //            if (!fileLocal.mkdirs()) {
//    //                resp.setRtnDesc("操作失败！创建下载统一支付文件本地存放目录[" + localPath + "]失败!");
//    //                resp.setRtnCode(RetCode.FAILED);
//    //                return resp;
//    //            }
//    //    }
//    //
//    //    log.info("返回统一支付文件为开始获取对账文件：{}", payUrl);
//    //
//    //    //将下载地址和文件名称分开获取
//    //    String recvRemotePath = "";
//    //    String recvRemoteName;
//    //    //使用sftp通过记录的文件名下载文件
//    //    recvRemoteName = payUrl;
//    //    int index = recvRemoteName.lastIndexOf(File.separator);
//    //    if (index != -1) {
//    //        recvRemotePath = recvRemoteName.substring(0, index + 1);
//    //        recvRemoteName = recvRemoteName.substring(index);
//    //    }
//    //
//    //    //设置下载间隔时间
//    //    int payWaitTime = Integer.parseInt(parameterUtil.getParameterByCode("mwbpPayWaitTime"));
//    //
//    //    String downloadNums = "3";
//    //
//    //    log.info("TaskStepGetPayTransBusiness获取文件下载次数downloadNums:{}", downloadNums);
//    //    boolean downloadFile = false;
//    //    for (int i = 0; i < Integer.parseInt(downloadNums); i++) {
//    //        //唐山使用GTP文件传输方式，还有一种是SFTP文件传输方式 优先使用GTP
//    //
//    //        if (MwbpConstant.ERR_MWBP_SFTP.equals(downFileMethod)) {
//    //            log.info("SFTP统一支付文件下载开始--01:{};02:{};03:{}:04:{} ", ip, port, user, pass);
//    //            //连接登录SFTP
//    //            try {
//    //                fileGTP.login(ip, port, user, pass, 60);
//    //            } catch (Error | GtpException e) {
//    //                log.error("登录GTP服务器=连接登录GTP:{}", e.getMessage());
//    //            }
//    //            log.info("GTP接收统一支付文件地址:{}", payUrl);
//    //            log.info("GTP本地统一支付文件地址:{}", localPath + recvRemoteName);
//    //            //使用gtp通过记录的文件名下载文件--支持多次下载覆盖原有文件
//    //            downloadFile = fileGTP.download(payUrl, localPath + recvRemoteName);
//    //            log.info("GTP统一支付对账文件下载结束downloadFile：{}", downloadFile);
//    //        } else {//SFTP文件传输方式下，文件下载
//    //            log.info("SFTP统一支付对账文件下载开始");
//    //            //Sftp远端地址根路径
//    //            String sbu = parameterUtil.getParameterByCode("mwbpSftpBaseUrl");
//    //            log.info("SFTP统一支付对账文件下载开始--01:{};02:{};03:{}:04:{} ", ip, port, user, pass);
//    //            log.info("SFTP接收统一支付文件地址:[{}]", sbu + recvRemotePath + recvRemoteName);
//    //            log.info("SFTP本地统一支付文件地址:[{}]", localPath + recvRemoteName);
//    //            downloadFile = fileSftp.downloadFile(ip, port, user, pass, sbu + recvRemotePath, recvRemoteName, localPath, recvRemoteName);
//    //            log.info("SFTP统一支付对账文件下载结束downloadFile：{}", downloadFile);
//    //        }
//    //        if (downloadFile) {
//    //            log.info("统一支付对账文件获取成功，本地路径为：{}", localPath + recvRemoteName);
//    //            break;
//    //        } else {
//    //            log.info("统一支付对账文件获取失败，等待重试，次数：{}，{}秒后进入下次统一支付对账文件获取", i, payWaitTime);
//    //            try {
//    //                Thread.sleep((long) payWaitTime * 1000 * 60);
//    //            } catch (InterruptedException e) {
//    //                log.info("登录统一支付对账文件获取失败，等待重试，次数：{}秒后进入下次统一支付对账文件获取", e.getMessage());
//    //            }
//    //        }
//    //    }
//    //
//    //    if (!downloadFile) {
//    //        resp.setRtnDesc("操作失败!统一支付文件" + payUrl + "下载失败!");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //
//    //    //初始化文件下载信息表
//    //    createBatchFilePay(taskStepObject, recvRemotePath, recvRemoteName);
//    //    List<MwbpPayCheckInfo> payCheckInfoList = readFileDataToPmcsPayCheckInfo(localPath, recvRemoteName);
//    //    //批量保存mwbp_pay_check_info
//    //    if (!payCheckInfoList.isEmpty()) {
//    //        payCheckInfoService.removeBatchByIds(payCheckInfoService.list(new LambdaQueryWrapper<MwbpPayCheckInfo>()
//    //                .in(MwbpPayCheckInfo::getCapitalCode,
//    //                        payCheckInfoList.stream().map(MwbpPayCheckInfo::getCapitalCode).collect(Collectors.toList()))));
//    //        if (!payCheckInfoService.saveBatchs(payCheckInfoList)) {
//    //            resp.setRtnDesc("操作失败!统一支付批量报错失败！");
//    //            resp.setRtnCode(RetCode.FAILED);
//    //            return resp;
//    //        }
//    //    }
//    //
//    //    return resp;
//    //
//    //}
//    //
//    //private MwbpPayCheckInfo createPayCheckInfo(MwbpPayCheckInfo payCheckInfo, String[] rowTmp) {
//    //    log.info("解析统一支付地址文件获取到的交易状态：{}", rowTmp[2]);
//    //    payCheckInfo.setCapitalCode(StringUtils.isBlank(rowTmp[0]) ? "" : rowTmp[0]);//资金流水号，
//    //    payCheckInfo.setPayDate(StringUtils.isBlank(rowTmp[1]) ? "" : rowTmp[1]);//缴费时间
//    //    payCheckInfo.setPayStatus(StringUtils.isBlank(rowTmp[2]) ? "" : rowTmp[2]);//交易状态
//    //    payCheckInfo.setPayAmt(StringUtils.isBlank(rowTmp[3]) ? BigDecimal.ZERO : new BigDecimal(rowTmp[3]));//交易金额
//    //    payCheckInfo.setChkStatus(PmcsConstant.PMCS_PAY_CHECK_INFO_CHK_STATUS_0);
//    //    // todo-wuwei:待确认
//    //    payCheckInfo.setPayTransType(StringUtils.isBlank(rowTmp[4]) ? "" : rowTmp[4]);//交易类型
//    //    log.info("解析统一支付放到实体payCheckInfo={}", payCheckInfo);
//    //    return payCheckInfo;
//    //}
//    //
//    //private List<MwbpPayCheckInfo> readFileDataToPmcsPayCheckInfo(String localPath, String recvRemoteName) {
//    //    log.debug("接收统一支付返回对账文件，本地路径：{}", localPath);
//    //    List<MwbpPayCheckInfo> list = new ArrayList<>();
//    //    //从本地读取文件并解析入库
//    //    List<String> checkList = new ArrayList<>();
//    //    try {
//    //        checkList = FileUtils.readFile(new File(localPath + recvRemoteName), "utf-8");
//    //    } catch (IOException e) {
//    //        log.info("从本地读取文件并解析入库:{}", e.getMessage(), e);
//    //    }
//    //    //判断文件中是否为空文件
//    //    if (Util.isNullOrEmpty(checkList)) {
//    //        log.debug("统一支付对账文件内容为空，跳过该步骤。");
//    //        return list;
//    //    }
//    //    for (String s : checkList) {
//    //        //文件数据每个字段
//    //        String[] rowTmp = s.split("\\|");
//    //        //创建统一支付对账实体类
//    //        MwbpPayCheckInfo payCheckInfo = new MwbpPayCheckInfo();
//    //        payCheckInfo = createPayCheckInfo(payCheckInfo, rowTmp);
//    //        list.add(payCheckInfo);
//    //    }
//    //    return list;
//    //}
//    //
//    //private void createBatchFilePay(BatchClearBasicTaskStepExec taskStepObject, String recvRemotePath, String recvRemoteName) {
//    //    MwbpBatchFile batchFile = new MwbpBatchFile();
//    //    batchFile.setTaskExecid(taskStepObject.getTaskExecid());
//    //    batchFile.setSysCode(PmcsConstant.PMCS_BATCH_FILE_SYS_CODE_4);
//    //    batchFile.setFileType(PmcsConstant.PMCS_BATCH_FILE_TYPE_0);
//    //    batchFile.setSliceServiceClass(taskStepObject.getSliceServiceClass());
//    //    batchFile.setExecDate(taskStepObject.getExecDate());
//    //    batchFile.setCreateBy("PAY");
//    //    batchFile.setRecvFilePath(recvRemotePath);
//    //    batchFile.setRecvFileName(recvRemoteName);
//    //    batchFile.setBatchNoType(PmcsConstant.PMCS_BATCH_FILE_BATCH_NO_TYPE_1);
//    //    batchFile.setRecvStatus(PmcsConstant.PMCS_BATCH_FILE_RECV_STATUS_2);
//    //    batchFileService.save(batchFile);
//    //    log.info("接收统一支付生成文件名称：{}", batchFile.getRecvFileName());
//    //}
//    //
//    //private String getLocalPathString(BatchClearBasicTaskStepExec taskStepObject) {
//    //    String localPath;
//    //    String path = payUrldownloadPayFileDir.getPath();
//    //    if (!payUrldownloadPayFileDir.getPath().endsWith(File.separator) && !payUrldownloadPayFileDir.getPath().endsWith("\\")) {
//    //        path = payUrldownloadPayFileDir.getPath() + File.separator;
//    //    }
//    //    localPath = path + taskStepObject.getExecDate();
//    //    return localPath;
//    //}
//    //
//    //private BatchExecResp checkConnServerAndFileDir(BatchExecResp resp, String downFileMethod) {
//    //
//    //    //GTP传输方式
//    //    String payConnServer = MwbpConstant.ERR_MWBP_GTP.equals(downFileMethod) ? parameterUtil.getParameterByCode("mwbpPayGtp") :
//    //            parameterUtil.getParameterByCode("mwbpPaySftp");
//    //    //校验是否为空
//    //    if (Util.isNullOrEmpty(payConnServer)) {
//    //        resp.setRtnDesc("操作失败！统一支付文件服务器文件传输地址为空!");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //    //校验GTP对账文件信息
//    //    String[] gtpStr = payConnServer.split(",");
//    //    //校验IP
//    //    ip = gtpStr[0];
//    //    if (Util.isNullOrEmpty(ip)) {
//    //        resp.setRtnDesc("操作失败！后台与文件服务器文件传输IP为空!");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //    //校验port
//    //    port = Integer.parseInt(gtpStr[1]);
//    //    if (Util.isNullOrEmpty(port)) {
//    //        resp.setRtnDesc("操作失败！后台与文件服务器文件传输地址port为空!");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //    //校验name
//    //    user = gtpStr[2];
//    //    if (Util.isNullOrEmpty(user)) {
//    //        resp.setRtnDesc("操作失败！后台与文件服务器文件传输用户USER为空!");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //    //GTP传输方式（pass）
//    //    pass = MwbpConstant.ERR_MWBP_GTP.equals(downFileMethod) ? parameterUtil.getParameterByCode("mwbpPayGtpPass_SM4") :
//    //            parameterUtil.getParameterByCode("mwbpPaySftpPass_SM4");
//    //
//    //    //校验是否为空
//    //    if (Util.isNullOrEmpty(pass)) {
//    //        resp.setRtnDesc("操作失败！统一支付文件服务器密码[mwbpCoreGtpPass_SM4]配置为空!");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //
//    //    }
//    //    //校验本地服务器
//    //    String payUrl = parameterUtil.getParameterByCode("mwbpPayUrl");
//    //    //校验是否为空
//    //    if (Util.isNullOrEmpty(payUrl)) {
//    //        resp.setRtnDesc("操作失败！统一支付文件服务器本地服务器路径[mwbpPayUrl]配置为空!");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //    //查看路径
//    //    payUrldownloadPayFileDir = new File(payUrl);
//    //    if (!payUrldownloadPayFileDir.exists()) {
//    //        boolean mkdirs = payUrldownloadPayFileDir.mkdirs();
//    //
//    //        if (mkdirs) {
//    //            payUrldownloadPayFileDir = new File(payUrl);
//    //        } else {
//    //            resp.setRtnDesc("操作失败！创建下载统一支付文件本地存放目录[" + payUrl + "]失败!");
//    //            resp.setRtnCode(RetCode.FAILED);
//    //            return resp;
//    //        }
//    //    }
//    //    //检查文件夹权限是否正常
//    //    log.info("统一支付文件夹{}可读权限为{}", payUrldownloadPayFileDir, payUrldownloadPayFileDir.canRead());
//    //    log.info("统一支付文件夹{}可写权限为{}", payUrldownloadPayFileDir, payUrldownloadPayFileDir.canWrite());
//    //
//    //    if (payUrldownloadPayFileDir.exists() && payUrldownloadPayFileDir.isDirectory()) {
//    //        File[] listFiles = payUrldownloadPayFileDir.listFiles();
//    //        if (Util.isNullOrEmpty(listFiles)) {
//    //            resp.setRtnDesc("操作失败！下载统一支付文件本地存放目录不存在[" + payUrl + "]");
//    //            resp.setRtnCode(RetCode.FAILED);
//    //            return resp;
//    //        }
//    //
//    //    } else {
//    //        resp.setRtnDesc("操作失败！下载统一支付文件本地存放目录不存在[" + payUrl + "]");
//    //        resp.setRtnCode(RetCode.FAILED);
//    //        return resp;
//    //    }
//    //
//    //    return resp;
//    //}
//    //
//    //@Override
//    //public void rollback(BatchTaskExecute BatchServiceBean) throws TaskStepExecException {
//    //
//    //}
//    //
//    //@Override
//    //public void printRunningMsg(BatchTaskExecute batchServiceBean) {
//    //    // 输出 运行参数信息
//    //    CommonUtil.showRunningMsg(this.getClass().getSimpleName(), "execute", batchServiceBean.getTaskParams(), batchServiceBean.getTaskStepParams());
//    //    // 当前方法 在 未启用 taskParams 和 taskStepParams 调用
//    //    CommonUtil.invalidParamMsg(this.getClass().getSimpleName(), "execute", batchServiceBean.getTaskParams(),
//    //            batchServiceBean.getTaskStepParams());
//    //}
//
//
//}
